package com.ingenio.business;

import java.util.ArrayList;
import java.util.List;

import com.ingenio.dao.DetalleRecuentoAdapter;
import com.ingenio.dao.RecuentoAdapter;

public class Producto {
	private String IdProducto;
	private String descProducto;
	private EstadoProducto estadoProducto;
	private UnidadMedida unidadMedidaStock;
	private List<UMProducto> umsProducto;
	private Marca marca;
	private SubRubro subRubro;
	private String caracteristicasProd;
	private boolean prodHabilitado;
	private List<PrecioProducto> precios;
	
	public Producto() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Producto(String idProducto, String descProducto,
			EstadoProducto estadoProducto, UnidadMedida unidadMedidaStock,
			List<UMProducto> umsProducto, Marca marca, SubRubro subRubro,
			String caracteristicasProd, boolean prodHabilitado) {
		super();
		IdProducto = idProducto;
		this.descProducto = descProducto;
		this.estadoProducto = estadoProducto;
		this.unidadMedidaStock = unidadMedidaStock;
		this.umsProducto = umsProducto;
		this.marca = marca;
		this.subRubro = subRubro;
		this.caracteristicasProd = caracteristicasProd;
		this.prodHabilitado = prodHabilitado;
	}
	
	public Producto(String idProducto, String descProducto,
			EstadoProducto estadoProducto, UnidadMedida unidadMedidaStock,
			Marca marca, SubRubro subRubro, String caracteristicasProd,
			boolean prodHabilitado) {
		super();
		IdProducto = idProducto;
		this.descProducto = descProducto;
		this.estadoProducto = estadoProducto;
		this.unidadMedidaStock = unidadMedidaStock;
		this.marca = marca;
		this.subRubro = subRubro;
		this.caracteristicasProd = caracteristicasProd;
		this.prodHabilitado = prodHabilitado;
	}

	public Producto(String idProducto, String descProducto,
			EstadoProducto estadoProducto, UnidadMedida unidadMedidaStock,
			List<UMProducto> umsProducto, Marca marca, SubRubro subRubro,
			String caracteristicasProd, boolean prodHabilitado,
			List<PrecioProducto> precios) {
		super();
		IdProducto = idProducto;
		this.descProducto = descProducto;
		this.estadoProducto = estadoProducto;
		this.unidadMedidaStock = unidadMedidaStock;
		this.umsProducto = umsProducto;
		this.marca = marca;
		this.subRubro = subRubro;
		this.caracteristicasProd = caracteristicasProd;
		this.prodHabilitado = prodHabilitado;
		this.precios = precios;
	}

	public String getIdProducto() {
		return IdProducto;
	}

	public void setIdProducto(String idProducto) {
		IdProducto = idProducto;
	}

	public String getDescProducto() {
		return descProducto;
	}

	public void setDescProducto(String descProducto) {
		this.descProducto = descProducto;
	}

	public EstadoProducto getEstadoProducto() {
		return estadoProducto;
	}

	public void setEstadoProducto(EstadoProducto estadoProducto) {
		this.estadoProducto = estadoProducto;
	}

	public UnidadMedida getUnidadMedidaStock() {
		return unidadMedidaStock;
	}

	public void setUnidadMedidaStock(UnidadMedida unidadMedidaStock) {
		this.unidadMedidaStock = unidadMedidaStock;
	}

	public List<UMProducto> getUmsProducto() {
		return umsProducto;
	}

	public void setUmsProducto(List<UMProducto> umsProducto) {
		this.umsProducto = umsProducto;
	}

	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public SubRubro getSubRubro() {
		return subRubro;
	}

	public void setSubRubro(SubRubro subRubro) {
		this.subRubro = subRubro;
	}

	public String getCaracteristicasProd() {
		return caracteristicasProd;
	}

	public void setCaracteristicasProd(String caracteristicasProd) {
		this.caracteristicasProd = caracteristicasProd;
	}

	public boolean isProdHabilitado() {
		return prodHabilitado;
	}

	public void setProdHabilitado(boolean prodHabilitado) {
		this.prodHabilitado = prodHabilitado;
	}

	public List<PrecioProducto> getPrecios() {
		return precios;
	}

	public void setPrecios(List<PrecioProducto> precios) {
		this.precios = precios;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((IdProducto == null) ? 0 : IdProducto.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Producto other = (Producto) obj;
		if (IdProducto == null) {
			if (other.IdProducto != null)
				return false;
		} else if (!IdProducto.equals(other.IdProducto))
			return false;
		return true;
	}
	
	public boolean bloqueadoPorRecuento() throws Exception {
		boolean bloqueado = false;
		RecuentoAdapter ra = new RecuentoAdapter();
		DetalleRecuentoAdapter dra = new DetalleRecuentoAdapter();
		List<Recuento> recuentosBloqueanStock = ra.devolverRecuentosBloqueanStock();
		List<DetalleRecuento> detalleRecuento = new ArrayList<DetalleRecuento>();
		for (Recuento r:recuentosBloqueanStock) {
			detalleRecuento = dra.devolverDetalle(r.getIdRecuento());
			for (DetalleRecuento dr:detalleRecuento) {
				if (dr.getProducto().getIdProducto() == this.IdProducto && 
						(dr.getEstadoDetalle().getIdEstadoDetalleRecuento() == 1 || dr.getEstadoDetalle().getIdEstadoDetalleRecuento() == 2)) {
					bloqueado = true;
					return bloqueado;
				}
			}
		}
		return bloqueado;
	}
}
